// 引入配置
import {
	headerTokenName
} from '@/common/config'
import { getToken } from '@/utils/auth'
import storage from '@/utils/storage'
import { tansParams } from "@/utils/itycu";

/**
 * 请求拦截
 * @param {Object} http
 */
module.exports = (vm) => {
    uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作        
		// 是否需要设置 token
		const isToken = (config.header || {}).isToken === false
		// 是否需要防止数据重复提交
		const isRepeatSubmit = (config.header || {}).repeatSubmit === false
		if(getToken() && !isToken){
			config.header[headerTokenName] = 'Bearer ' + getToken();
		}

		// get请求映射params参数
		if (config.method === 'GET' && config.params) {
		  let url = config.url + '?' + tansParams(config.params);
		  url = url.slice(0, -1);
		  config.params = {};
		  config.url = url;
		}
		console.log(config)
		if (!isRepeatSubmit && (config.method === 'POST' || config.method === 'PUT')) {
		  const requestObj = {
		    url: config.url,
		    data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
		    time: new Date().getTime()
		  }
		
		  const sessionObj = storage.get('sessionObj')
		  if (sessionObj === undefined || sessionObj === null || sessionObj === '' || sessionObj === {}) {
		    storage.save('sessionObj', requestObj)
		  } else {
		    const s_url = sessionObj.url;                  // 请求地址
		    const s_data = sessionObj.data;                // 请求数据
		    const s_time = sessionObj.time;                // 请求时间
		    const interval = 1000;                         // 间隔时间(ms)，小于此时间视为重复提交
		    if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
		      const message = '数据正在处理，请勿重复提交';
		      console.warn(`[${s_url}]: ` + message)
		      return Promise.reject(new Error(message))
		    } else {
		      storage.save('sessionObj', requestObj)
		    }
		  }
		}
		
        return config
    }, (config) => // 可使用async await 做异步操作
        Promise.reject(config))
}
